import Vue from 'vue';
// 存放共享数据
import _state from './state';
// Vue.observable();
// 变成响应式数据  state状态是数据的集合  数据的集合也是状态
export const state = Vue.observable(_state);
// 修改数据的方法
export const mutations = {
  changeUserAvatar(value) {
    state.userAvatar = value;
  },
};

// 解决：直接返回计算属性的结果，简化计算属性操作
// computed: {
//   // ...mapState,
//   a() {
//     return state.a;
//   },
// },
// eslint-disable-next-line func-names
export const mapState = function (list) {
  // list是个数组，可能是取多个方法
  // res存放属性对应的值
  const res = {};
  // eslint-disable-next-line no-plusplus
  for (let i = 0; i < list.length; i++) {
    if (list[i] in state) {
      // 模拟计算属性值，因为属性值时依靠return，所以这里在函数内需要返回值
      // eslint-disable-next-line func-names
      res[list[i]] = function () {
        // 如果该属性存在直接返回这个属性的属性值
        return state[list[i]];
      };
    }
  }
  return res;
};


// 只需要使用其中一个方法时，指定某一个方法导出并使用，避免浪费
// eslint-disable-next-line func-names
export const mapMutations = function (list) {
  const res = {};
  // eslint-disable-next-line no-plusplus
  for (let i = 0; i < list.length; i++) {
    // 如果mutations中存在这个方法
    if (list[i] in mutations) {
      res[list[i]] = mutations[list[i]];
    }
  }
  return res;
};
